<script setup lang="ts">
// 泛型  ----  类型的复用
type User = {
  id: number;
  name: string;
  permission: object[];
};

const data: Array<User> = [
  { id: 1, name: 'xxx', permission: [{}, {}] },
  { id: 1, name: 'xxx', permission: [{}, {}] },
  { id: 1, name: 'xxx', permission: [{}, {}] },
];
console.log(data);

// 数组的两种定义类型的方法：  类型[],  Array<T> 数组的泛型类型，有泛型变量
const arr: (number | string)[] = [1, 2, 3, 'a'];

type MYType = number | string | boolean;
const arr1: Array<MYType> = [1, 2, 3, 'a', true];

console.log(arr, arr1);

// 看几个内置的泛型
// 以前学过的 数组里面 基本上所有的循环迭代方法，都有两个参数，第一个参数是函数，第二个是 回调函数里面的this指向，可以不写
arr.forEach(
  (item, index, arrTmp) => {
    console.log(this);

    console.log(item, index, arrTmp);
  },
  { name: 123 }
);

// string[]
const aaa = [1, 2, 3].map((item, index, arrTmp) => {
  console.log(item, index, arrTmp);
  return 'aa';
});
console.log(aaa); // ['aa', 'aa', 'aa']
</script>

<template>
  <a class="main">123</a>
</template>
